package lc.weekly;

public interface WeeklyContest289 {

    /**
     * 6070. 计算字符串的数字和
     * <p>
     * <p>
     * 给你一个由若干数字（0 - 9）组成的字符串 s ，和一个整数。
     * <p>
     * 如果 s 的长度大于 k ，则可以执行一轮操作。在一轮操作中，需要完成以下工作：
     * <ol>
     *     <li>将 s 拆分 成长度为 k 的若干 连续数字组 ，使得前 k 个字符都分在第一组，接下来的 k 个字符都分在第二组，依此类推。注意，最后一个数字组的长度可以小于 k 。</li>
     *     <li>用表示每个数字组中所有数字之和的字符串来 替换 对应的数字组。例如，"346" 会替换为 "13" ，因为 3 + 4 + 6 = 13 。</li>
     *     <li>合并 所有组以形成一个新字符串。如果新字符串的长度大于 k 则重复第一步。</li>
     * </ol>
     * 返回在完成所有轮操作后的 s 。
     * <p>
     * <p>
     * 提示：
     * <ul>
     *     <li>1 <= s.length <= 100</li>
     *     <li>2 <= k <= 100</li>
     *     <li>s 仅由数字（0 - 9）组成。</li>
     * </ul>
     *
     * @param s
     * @param k
     * @return
     */
    String digitSum(String s, int k);

    /**
     * 6071. 完成所有任务需要的最少轮数
     * <p>
     * <p>
     * 给你一个下标从 0 开始的整数数组 tasks ，其中 tasks[i] 表示任务的难度级别。在每一轮中，你可以完成 2 个或者 3 个 相同难度级别 的任务。
     * <p>
     * 返回完成所有任务需要的 最少 轮数，如果无法完成所有任务，返回 -1 。
     * <p>
     * 提示：
     * <ul>
     *     <li>1 <= tasks.length <= 10<sup>5</sup></li>
     *     <li>1 <= tasks[i] <= 10<sup>9</sup></li>
     * </ul>
     *
     * @param tasks
     * @return
     */
    int minimumRounds(int[] tasks);

    /**
     * 6072. 转角路径的乘积中最多能有几个尾随零
     * <p>
     * <p>
     * 给你一个二维整数数组 grid ，大小为 m x n，其中每个单元格都含一个正整数。
     * <p>
     * 转角路径 定义为：包含至多一个弯的一组相邻单元。具体而言，路径应该完全 向水平方向 或者 向竖直方向 移动过弯（如果存在弯），而不能访问之前访问过的单元格。在过弯之后，路径应当完全朝 另一个 方向行进：如果之前是向水平方向，那么就应该变为向竖直方向；反之亦然。当然，同样不能访问之前已经访问过的单元格。
     * <p>
     * 一条路径的 乘积 定义为：路径上所有值的乘积。
     * <p>
     * 请你从 grid 中找出一条乘积中尾随零数目最多的转角路径，并返回该路径中尾随零的数目。
     * <p>
     * 注意：
     * <ul>
     *     <li>水平 移动是指向左或右移动。</li>
     *     <li>竖直 移动是指向上或下移动。</li>
     * </ul>
     * <p>
     * 提示：
     * <ul>
     *     <li>m == grid.length</li>
     *     <li>n == grid[i].length</li>
     *     <li>1 <= m, n <= 10<sup>5</sup></li>
     *     <li>1 <= m * n <= 10<sup>5</sup></li>
     *     <li>1 <= grid[i][j] <= 1000</li>
     * </ul>
     *
     * @param grid
     * @return
     */
    int maxTrailingZeros(int[][] grid);

    /**
     * 6073. 相邻字符不同的最长路径
     * <p>
     * <p>
     * 给你一棵 树（即一个连通、无向、无环图），根节点是节点 0 ，这棵树由编号从 0 到 n - 1 的 n 个节点组成。用下标从 0 开始、长度为 n 的数组 parent 来表示这棵树，其中 parent[i] 是节点 i 的父节点，由于节点 0 是根节点，所以 parent[0] == -1 。
     * <p>
     * 另给你一个字符串 s ，长度也是 n ，其中 s[i] 表示分配给节点 i 的字符。
     * <p>
     * 请你找出路径上任意一对相邻节点都没有分配到相同字符的 最长路径 ，并返回该路径的长度。
     * <p>
     * <p>
     * 提示：
     * <ul>
     *     <li>n == parent.length == s.length</li>
     *     <li>1 <= n <= 10<sup>5</sup></li>
     *     <li>对所有 i >= 1 ，0 <= parent[i] <= n - 1 均成立</li>
     *     <li>parent[0] == -1</li>
     *     <li>parent 表示一棵有效的树</li>
     *     <li>s 仅由小写英文字母组成</li>
     * </ul>
     *
     * @param parent
     * @param s
     * @return
     */
    int longestPath(int[] parent, String s);
}
